'''简单闭包

优点，
使用闭包可以让我们得到:
无需定义全局变量即可实现通过函数,持续的访问、修改某个值
闭包使用的变量的所用于在函数内,难以被错误的调用修改
缺点:
由于内部函数持续引用外部函数的值，所以会导致这一部分内存空间不被释放直占用内存
'''

# =====================简单闭包案例一==========================
'''
没有用闭包的案例
# 定义全局变量
title_pub = "【中华名吃】"
def push(msg):
    print(f'<{title_pub}>{msg}>{title_pub}>')

title_pub = '金刚罩'
push('学习技能')

title_pub = '鱼香肉丝'
push('学习特色菜')
# 以上代码问题： 全局变量又被修改的风险！！！



# 使用闭包案例
def outer(title):
    def inner(msg):
        print(f'<{title}>{msg}>{title}>')

    return inner

fn1 = outer('武林绝学')
fn1('毒龙钻')
fn1('降龙十八掌')
# <武林绝学>毒龙钻>武林绝学>
# <武林绝学>降龙十八掌>武林绝学>
'''
# =====================END==================================


# =====================简单闭包案例二==========================
'''
# 没有使用闭包
sum =0
def ad(num):
    global sum
    sum += num
    print(sum)

ad(2)
ad(3)



# 使用闭包
def outer(num1):
    def inner(num2):
        nonlocal num1 # 需要使用nonlocal关键字修饰外部函数变量，才可在内部函数中修改它；
        num1 += num2
        print(num1)
    return inner

fn1 = outer(0)
fn1(2)
fn1(3)
'''
# =====================END===================================